package crud.client.factory.form;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import com.google.gwt.user.client.rpc.IsSerializable;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.form.validator.LengthRangeValidator;
import com.smartgwt.client.widgets.form.validator.RegExpValidator;
import com.smartgwt.client.widgets.form.validator.Validator;

import crud.client.data.Colonne;
import crud.client.data.ColonneString;
import crud.client.data.DataView;

public class StringFormItemFactory extends FormItemFactory implements Serializable, IsSerializable
{

	@Override
	public FormItem newFormItem(Colonne colonne, DataView dataView)
	{
		TextItem formItem = new TextItem();
		if (colonne.getTaille() > 0)
		{
			formItem.setLength(colonne.getTaille());
		} else
		{
			formItem.setLength(255);
		}

		if (dataView != null && dataView.getLabel() != null)
		{
			formItem.setValue(dataView.getLabel());
		}

		return formItem;
	}

	@Override
	public Serializable getData(Serializable key)
	{
		return key;
	}

	@Override
	public List<Validator> newValidatorList(Colonne colonne)
	{
		List<Validator> validatorList = new ArrayList<Validator>();

		// Validateur de taille
		LengthRangeValidator lengthRangeValidator = new LengthRangeValidator();
		lengthRangeValidator.setMax(String.valueOf(colonne.getTaille()));
		lengthRangeValidator.setErrorMessage("La taille du texte ne doit pas depasser " + colonne.getTaille() + " caracteres");
		lengthRangeValidator.setClientOnly(true);
		validatorList.add(lengthRangeValidator);

		if (((ColonneString) colonne).isEmail() == true)
		{
			RegExpValidator emailValidator = new RegExpValidator();
			emailValidator.setExpression("^([a-zA-Z0-9_.\\-+])+@(([a-zA-Z0-9\\-])+\\.)+[a-zA-Z0-9]{2,4}$");
			emailValidator.setErrorMessage("L'email n'est pas valide");
			validatorList.add(emailValidator);
		}

		return validatorList;
	}

}
